/**
 * Axios封装
 */
import axios,{type AxiosInstance, type AxiosRequestConfig} from "axios"

const config: AxiosRequestConfig = {
    baseURL: import.meta.env.VITE_API_URL, //请求基准路径
    timeout: 1000 * 10  //请求超时时间设置
}

class RequestHttp{
    service: AxiosInstance
    constructor(config: AxiosRequestConfig){
        //创建一个新的axios实例
        this.service = axios.create(config) //给service赋值

        /**
         * 请求拦截器
         * 1.token的携带
         * 2.数据的加密
         * 3.请求签名
         * 4.刷新token
         */
        this.service.interceptors.request.use((config)=>{
            return config
        })

        /**
         * 响应拦截器
         * 1.数据的解密
         * 2.刷新token
         */
        this.service.interceptors.response.use(
            (response) => {
                //解构出接口返回值
                const {data} = response
                return data.data
            },
            (error) => {
                return Promise.reject(error)
            }
        )

    }

    //封装常用的get请求
    get<T>(code:string,params?:object,_object = {}): Promise<T> {
        return this.service.get('/gateway', { params,headers:{
            'X-Host' : code
        }, ..._object });
    }

    //封装post请求
    post<T>(code: string, params?: object | string, _object = {}): Promise<T>{
        return this.service.post('', params,{
            headers:{
                'X-Host' : code
            }, ..._object
        });
    }
}

export default new RequestHttp(config) //导出实例